function [D, C, aver_D] = Distance_F(A)
% 改进的最短路径计算函数（针对介数中心性优化）
% 输入: A - 邻接矩阵（无权图）
% 输出: D - 最短路径距离矩阵
%       C - 最短路径条数矩阵
%       aver_D - 网络平均最短路径长度

N = size(A, 1);
D = A; % 初始化距离矩阵
C = zeros(N); % 初始化路径计数矩阵

% 初始化设置
D(D == 0) = inf; % 无直接连接的设为无穷大
for i = 1:N
    D(i, i) = 0; % 对角线设为0
    C(i, i) = 1; % 自身到自身的路径数为1
end

% 初始化直接连接的路径数
C(A == 1) = 1;

% Floyd-Warshall算法改进版
for k = 1:N
    for i = 1:N
        for j = 1:N
            % 只有当i≠k且k≠j时才更新（避免自环影响）
            if i ~= k && k ~= j
                if D(i, j) > D(i, k) + D(k, j)
                    % 发现更短路径，更新距离和路径数
                    D(i, j) = D(i, k) + D(k, j);
                    C(i, j) = C(i, k) * C(k, j);
                elseif D(i, j) == D(i, k) + D(k, j)
                    % 发现等长路径，累加路径数
                    C(i, j) = C(i, j) + C(i, k) * C(k, j);
                end
            end
        end
    end
end

% 处理不连通的节点对（保持C=0）
C(isinf(D)) = 0;

% 计算平均最短路径长度（只考虑连通部分）
valid_D = D(~isinf(D) & D ~= 0);
if ~isempty(valid_D)
    aver_D = mean(valid_D(:));
else
    aver_D = 0; % 全不连通的情况
end

% 确保数值稳定性（避免除零）
C(C == 0) = eps; % 将0替换为极小值
end